#include <iostream>
#include <vector>
#include <string>
using namespace std;

// struct TreeNode
// {
//   int val;
//   TreeNode *left;
//   TreeNode *right;
//   TreeNode(int x) : val(x), left(NULL), right(NULL) {}
// };

// struct ListNode
// {
//   int val;
//   ListNode *next;
//   ListNode(int x) : val(x), next(NULL) {}
// };
bool runnian;
bool isrunnian(int year)
{
  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
  {
    return true;
  }
  return false;
}

bool isValid(vector<int> track)
{
  if (track[0] * 10 + track[1] > 12)
  {
    return false;
  }
  int a[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 平年
  int b[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 闰年
  if (isrunnian)
  {
    if (track[2] * 10 + track[3] > b[track[0] * 10 + track[1]])
    {
      return false;
    }
  }
  else
  {
    if (track[2] * 10 + track[3] > a[track[0] * 10 + track[1]])
    {
      return false;
    }
  }

  return true;
}

void permute(vector<int> &data, vector<bool> &used, vector<int> &track, vector<vector<int>> &res, int depth)
{

  //base case
  if (depth == data.size())
  {
    if (isValid(track))
    {
      res.push_back(track);
    }
    return;
  }

  for (int i = 0; i < 4; i++)
  {

    if (used[i] == true)
    {
      continue;
    }
    // 剪枝：避免产生重复
    if (i > 0 && data[i - 1] == data[i] && used[i - 1] == false)
    {
      continue;
    }
    track.push_back(data[i]);
    used[i] = true;
    permute(data, used, track, res, depth + 1);
    used[i] = false;
    track.pop_back();
  }
}

vector<int> maxData(const vector<vector<int>> &res)
{
  vector<int> maxdata(4);
  for (auto data : res)
  {
    if (data[0] * 10 + data[1] > maxdata[0] * 10 + maxdata[1])
    {
      maxdata = data;
      continue;
    }
    else if (data[0] * 10 + data[1] == maxdata[0] * 10 + maxdata[1])
    {
      if (data[2] * 10 + data[3] > maxdata[2] * 10 + maxdata[3])
      {
        maxdata = data;
        continue;
      }
    }
  }
  return maxdata;
}
int main()
{
  //islower(char c) 是否为小写字母
  //isupper(char c) 是否为大写字母
  //isdigit(char c) 是否为数字
  //isalpha(char c) 是否为字母
  //isalnum(char c) 是否为字母或者数字
  //toupper(char c) 字母小转大
  //tolower(char c) 字母大转小
  int year;
  vector<int> data(4);
  cin >> year;
  runnian = isrunnian(year);

  for (int i = 0; i < 4; i++)
  {
    cin >> data[i];
  }
  vector<bool> used(4, false);
  vector<int> track;
  vector<vector<int>> res;
  // 开始对日期进行全排列
  permute(data, used, track, res, 0);
  // 从合法日期里面选择一个最大的日期
  vector<int> max = maxData(res);
  cout << year << '.' << max[0] << max[1] << '.' << max[2] << max[3] << endl;
  return 0;
}